package org.fxmisc.cssfx.test; /* * #%L * CSSFX * %% * Copyright (C) 2014 CSSFX by Matthieu Brouillard * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ import java.util.Random; import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Node; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.BorderPane; import javafx.scene.layout.FlowPane; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.stage.Stage; import org.fxmisc.cssfx.CSSFX; import org.fxmisc.cssfx.test.ui.TestableUI; public class CSSFXTesterApp extends Application implements TestableUI { private Button btnLoadOddCSS; // needed as field for tests purposes @Override public void start(Stage stage) throws Exception { fillStage(stage); stage.show(); CSSFX.start(); } public void initUI(Stage stage) { Scene s = stage.getScene(); String cssURI = getClass().getResource("app.css").toExternalForm(); s.getStylesheets().add(cssURI); btnLoadOddCSS.setOnAction((ae) -> s.getStylesheets().add(getClass().getResource("oddeven.css").toExternalForm())); } private void fillStage(Stage stage) { Parent p = getRootNode(); Scene scene = new Scene(p, 500, 350); stage.setScene(scene); initUI(stage); } private Node createButtonBar() { FlowPane fp = new FlowPane(); fp.getStyleClass().addAll("button-bar", "bottom"); fp.getChildren().addAll(new Button("Action"), new Button("Action")); String buttonBarCSSUri = getClass().getResource("bottom.css").toExternalForm(); fp.getStylesheets().add(buttonBarCSSUri); return fp; } private Group buildCirclePane(int prefWidth, int prefHeight) { Group freePlacePane = new Group(); int defaultShapeSize = 50; int shapeNumber = 10; Random r = new Random(); for (int i = 0; i < shapeNumber; i++) { Circle c = new Circle(Math.max(10, defaultShapeSize * r.nextInt(100) / 100)); c.getStyleClass().add("circle"); if (i % 2 == 0) { c.getStyleClass().add("even"); } else { c.getStyleClass().add("odd"); } c.setCenterX(r.nextInt(prefWidth)); c.setCenterY(r.nextInt(prefHeight)); c.setFill(Color.BLUE); freePlacePane.getChildren().add(c); } freePlacePane.getStyleClass().add("circles"); freePlacePane.prefWidth(250); freePlacePane.prefWidth(200); return freePlacePane; } public static void main(String[] args) { launch(args); } @Override public Parent getRootNode() { BorderPane bp = new BorderPane(); int prefWidth = 300; int prefHeight = 200; Button btnShowBottomBar = new Button("Dynamic bottom bar"); btnShowBottomBar.setId("dynamicBar"); btnShowBottomBar.setOnAction((ae) -> bp.setBottom(createButtonBar())); btnLoadOddCSS = new Button("Load additional CSS"); btnLoadOddCSS.setId("dynamicCSS"); Button btnCreateStage = new Button("Create new stage"); btnCreateStage.setOnAction(ae -> { Stage stage = new Stage(); fillStage(stage); stage.show(); }); btnCreateStage.setId("dynamicStage"); FlowPane topBar = new FlowPane(btnShowBottomBar, btnLoadOddCSS, btnCreateStage); topBar.getStyleClass().addAll("button-bar", "top"); bp.setTop(topBar); bp.setCenter(buildCirclePane(prefWidth, prefHeight)); return bp; } }